package cn.slg.test.Lambda;

public class EatableDemo {
    public static void main(String[] args) {
        // 正常来说，需要实现Eatable接口的类的实例对象。
        // 但是，由于Eatable接口只有一个抽象方法，所以这里直接用Lambda表达式创建一个实例对象
        // 跟匿名内部类有相同的应用场景，即动态创建一个实现接口即及抽象方法的实例对象。
        // 但是匿名内部类的这个实例对象，可以引用到，并多次调用。
        // 而lambda表达式无法提供实例对象。
        useEatable((string, integer) -> {
            String r = string + integer;
            System.out.println("我正在吃:" + r);
            return null;
        }, "苹果", 1);

        // 通过匿名内部类，创建一个实现 Eatable接口的匿名对象，并调用其 eat() 方法
        new Eatable() {
            @Override
            public Eatable eat(String str, Integer integer) {
                String str1 = str + integer;
                System.out.println(str1);
                return this;
            }
        }.eat("香蕉", 11);
    }

    //
    private static void useEatable(Eatable e, String str, Integer integer) {
        System.out.println("在这里添加前置方法");    // 这前置方法也可以是Lambda函数
        e.eat(str, integer);
        System.out.println("在这里添加后置方法");
    }
}
